package com.zyq.knife4j.controller;

import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.zyq.knife4j.pojo.dto.User;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import springfox.documentation.annotations.ApiIgnore;

@RestController
@Api(tags = "hello测试模块")//模块名称
public class HelloController {  //   localhost:8080/hello
    //    http://localhost:8080/doc.html
    //注意： Knife4jConfig的String basePackage 一定要正确指定controller类的路径，否则doc.html没作用

    @ApiOperation(value = "hello测试方法")//功能名称
    @ApiOperationSupport(order = 103)//在文档中的顺序
    @GetMapping("/hello")
    public String hello() {
        return "hello";
    }

    @ApiOperation(value = "hello2测试方法")
    @ApiOperationSupport(order = 102)
    @PostMapping("/hello2")
    public String hello2(User user) {
        return "你好："+user.getName();
    }

    @ApiOperation(value = "hello3测试方法")//功能名称
    @ApiOperationSupport(order = 101)//在文档中的顺序
    @ApiImplicitParam(name="x" ,value="编号",required = true,dataType = "int",example = "10")//基本类型参数
    @GetMapping("/hello3")
    public String hello3(int x) {
        return "你好："+x;
    }

    @ApiOperation(value = "hello4测试方法")//功能名称
    @ApiOperationSupport(order = 101)//在文档中的顺序
    @ApiImplicitParams({@ApiImplicitParam(name="x" ,value="x坐标",required = true,dataType = "int",example = "10"),
            @ApiImplicitParam(name="y" ,value="y坐标",required = true,dataType = "int",example = "10")})//基本类型参数
    @GetMapping("/hello4")
    public String hello4(int x,int y, @ApiIgnore int z) {
        return "你好："+(x+y);
    }
}



//@Api(tags = "hello测试模块"): 在控制器类上添加@Api注解，并配置tags属性，可以指定模块名称


//@ApiOperation():
//在处理请求的方法上添加@ApiOperation注解可以配置某个业务功能名称(某个Controller模块的某个功能)


//@ApiOperationSupport注解的order属性值解释：
//通常，建议以上配置的order值至少是2位的数字，并且有预留位置，
// 例如10~19之间的都是增加数据的业务，20~29之间的都是删除数据的业务，
// 30~39之间都是修改数据的业务，40~49之间都是查询数据的业务。



//添加在控制器类中处理请求的方法上的注解，主要用于配置非封装(非XxxDTO/XxxParam的参数)的参数
//参数说明:
//name：指定参数名称（参数变量名）
//value：配置参数名称
//dataType：配置数据类型
//required：配置是否必须提交此请求参数
//example：配置参数的示例值
//注意：一旦使用此注解，各个参数的数据类型默认都会显示String，可以通过dataType指定数据类型